package listados;

import java.awt.Color;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Vector;

import javax.swing.BorderFactory;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

import paneles.MonedaRender;

import accesoADatos.AccesoADatos;

import com.toedter.calendar.JDateChooser;

import datos.Caja;

public class ListadoCajas extends ListadoDialog {

	private JLabel lFechaInicio;
	private JDateChooser cFechaInicio;
	private JLabel lFechaFin;
	private JDateChooser cFechaFin;
	private JLabel lDiferencia;
	private JComboBox cbDiferencia;

	public ListadoCajas(JFrame frame, Vector v) {
		super(frame, v);
		this.setTitle("Listado de Cajas");
		{
			lFechaInicio = new JLabel();
			super.jPanel1.add(lFechaInicio);
			lFechaInicio.setText("Fecha inicio");
			lFechaInicio.setHorizontalAlignment(SwingConstants.CENTER);
			lFechaInicio.setPreferredSize(new java.awt.Dimension(100,21));
			lFechaInicio.setBorder(BorderFactory.createLineBorder(new Color(0,0,0)));
			lFechaInicio.setForeground(new Color(0,0,0));
			lFechaInicio.setSize(100, 21);
		}
		{
			cFechaInicio = new JDateChooser();
			cFechaInicio.setDate(new Date());
			Date fecha = cFechaInicio.getDate();
			fecha.setDate(1);
			cFechaInicio.setDate(fecha);
			cFechaInicio.setBorder(BorderFactory.createLineBorder(new Color(0,0,0)));
			super.jPanel1.add(cFechaInicio);
			cFechaInicio.setPreferredSize(new java.awt.Dimension(130, 21));
		}
		{
			lFechaFin = new JLabel();
			super.jPanel1.add(lFechaFin);
			lFechaFin.setText("Fecha fin");
			lFechaFin.setHorizontalAlignment(SwingConstants.CENTER);
			lFechaFin.setPreferredSize(new java.awt.Dimension(100,21));
			lFechaFin.setBorder(BorderFactory.createLineBorder(new Color(0,0,0)));
			lFechaFin.setSize(100, 21);
			lFechaFin.setForeground(new Color(0,0,0));
		}
		{
			cFechaFin = new JDateChooser();
			cFechaFin.setDate(new Date());
			cFechaFin.setBorder(BorderFactory.createLineBorder(new Color(0,0,0)));
			super.jPanel1.add(cFechaFin);
			cFechaFin.setPreferredSize(new java.awt.Dimension(130, 21));
		}
		{
			lDiferencia = new JLabel("Tipo de diferencia");
			lDiferencia.setPreferredSize(new java.awt.Dimension(130, 21));
			lDiferencia.setHorizontalAlignment(SwingConstants.CENTER);
			lDiferencia.setBorder(BorderFactory.createLineBorder(new Color(0,0,0)));
			lDiferencia.setForeground(new Color(0,0,0));
			super.jPanel1.add(lDiferencia);
		}
		{
			Vector vec = new Vector();
			vec.add(new String("Todos"));
			vec.add(new String("Positiva"));
			vec.add(new String("Negativa"));
			ComboBoxModel cbServicioModel = 
				new DefaultComboBoxModel(
						vec.toArray());
			cbDiferencia = new JComboBox();
			cbDiferencia.addItem(new CriterioTodos());
			cbDiferencia.addItem(new CriterioCajaDifPos());
			cbDiferencia.addItem(new CriterioCajaDifNeg());
			cbDiferencia.setSelectedIndex(0);
			cbDiferencia.setBorder(BorderFactory.createLineBorder(new Color(0,0,0)));
			super.jPanel1.add(cbDiferencia);
			cbDiferencia.setPreferredSize(new java.awt.Dimension(130, 21));
		}
		this.paneListados1.getJTable1().getColumnModel().getColumn(0).setMinWidth(120);
		this.paneListados1.getJTable1().getColumnModel().getColumn(1).setCellRenderer(new MonedaRender());
		this.paneListados1.getJTable1().getColumnModel().getColumn(2).setCellRenderer(new MonedaRender());
		this.paneListados1.getJTable1().getColumnModel().getColumn(3).setCellRenderer(new MonedaRender());
		this.paneListados1.getJTable1().getColumnModel().getColumn(4).setCellRenderer(new MonedaRender());
		this.paneListados1.getJTable1().getColumnModel().getColumn(5).setCellRenderer(new MonedaRender());
		pack();
		this.setLocationRelativeTo(null);
		this.setVisible(true);
	}

	@Override
	public Vector cargarVector(Object object) {
		Caja c = (Caja)object;
		Vector v = new Vector();
		v.add(this.FormatearFecha(c.getFecha()));
		v.add(c.getSaldoInicial());
		v.add(c.getTotalFacturado());
		double retiros = c.getTotalRetiros();
		v.add(retiros);
		v.add(c.getSaldoEfectivo());
		v.add(c.getSaldoEfectivo()-(c.getSaldoInicial().doubleValue()+c.getTotalFacturado().doubleValue()-retiros));
		return v;
	}

	@Override
	public List getLista() {
		Date inicio = this.cFechaInicio.getDate();
		Date fin = this.cFechaFin.getDate();
		List l = AccesoADatos.getInstance().getCajas(inicio, fin);
		Caja cactual = AccesoADatos.getInstance().getCaja();
		if(cactual != null)
			l.remove(cactual);
		List result = new ArrayList();
		Criterio c = getCriterio();
		for (int i=0; i<l.size();i++){
			Caja caja=(Caja)l.get(i);
			if (c.eval(caja))
				result.add(caja);
		}
		return result;
	}
	
	private Criterio getCriterio() {
		return ((Criterio)this.cbDiferencia.getSelectedItem());
	}

	public static void main(String[] args) {
		JFrame frame = new JFrame();
		Vector v = new Vector();
		v.add("<html><p align= 'center'>Fecha<br>Apertura</p></html>");
		v.add("<html><p align= 'center'>Saldo<br>Inicial</p></html>");
		v.add("<html><p align= 'center'>Total<br>Facturado</p></html>");
		v.add("<html><p align= 'center'>Total<br>Retiros</p></html>");
		v.add("<html><p align= 'center'>Saldo<br>Efectivo</p></html>");
		v.add("<html><p align= 'center'>Diferencia<br>de Caja</p></html>");
		new ListadoCajas(frame,v);
	}
}
